package DAO;

import Logica.Owner;
import Logica.Pen;
import Logica.Staff;
import Logica.Supplies;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;

public class PharmaDao {
    public PharmaDao() {
    }
    

    public boolean creaPharmaceutical(int ItemNumber,String dosis, String MetAdmon) {

        int NumberF=-5;
        Conexion conexion = new Conexion();
        boolean creado = false;
        Connection conex;

        try {
            conex = conexion.getConnection();
            PreparedStatement ps = null;
            ResultSet rs = null;
          
            ResultSet rsa = null;
            int mayor = -1;
            
                               
            //Debo Verificar que el itemNumber no este ya, porque si ya esta u numero pharma tiene su instancia como Pharma.
            ps=
            conex.prepareStatement("select count (itemNumber) from detailsPharmaceutical where itemNumber="+ItemNumber);
            rsa = ps.executeQuery();
           
            while (rsa.next())
            if (rsa.getInt(1)>0){
                System.out.println(rsa.getInt(1)+"Esa supplie ya es pharmaceutical, no pude instanciarse 2 veces.");
                return false;
            }
            
            ps =
            conex.prepareStatement("select max (pharmaNumber)  from detailsPharmaceutical");

            rsa = ps.executeQuery();
            if (rsa!=null) {
                while (rsa.next()) {
                    mayor = rsa.getInt(1);
                }
            } else{
                NumberF = 1;
                
            }
            ps = conex.prepareStatement("  INSERT INTO detailsPharmaceutical (itemNumber, DOSAGE,ADMONMETHOD,PHARMANUMBER) VALUES (?, ?,?,?)");
           
           NumberF = mayor + 1;
           ps.setInt(1, ItemNumber);
           ps.setString(2, dosis);
           ps.setString(3,MetAdmon);
           ps.setInt(4,NumberF); 


            int numeroFilas = ps.executeUpdate();
            System.out.println("El numero de filas que inserto fueron" +
                               numeroFilas);
            creado = true;
            conex.close();

        } catch (SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());

        }
        return creado;
    }


//ESTA FUNCION ES PARA CUANDO VIENE DESDE SUPPLIE_DAO.
    public boolean eliminarPharma(int PharmaNumber) {
  
        Conexion conexion = new Conexion();
        boolean eliminado = false;
        Connection conex;

        try {
            conex = conexion.getConnection();
            PreparedStatement ps = null;
            ResultSet rs = null;
 
            ps = conex.prepareStatement("DELETE FROM detailsPharmaceutical where pharmaNumber = ?");

            ps.setInt(1, PharmaNumber);


            int numeroFilas = ps.executeUpdate();
            System.out.println("El numero de filas que borro fueron" +
                               numeroFilas);
            eliminado = true;
            
            conex.close();

        
        } catch (SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());

        }
        return eliminado;
    }
    
    //Esta funcion se va hasta supplie y borra todo desde ahi.
    public boolean eliminarPharma_Supplie(int PharmaNumber) {
    
        Conexion conexion = new Conexion();
        boolean eliminado = false;
        Connection conex;

        try {
            conex = conexion.getConnection();
            PreparedStatement ps = null;
            ResultSet rs = null;
    
            ps = conex.prepareStatement("SELECT itemNumber FROM detailsPharmaceutical where pharmaNumber = ?");
            ps.setInt(1, PharmaNumber);
            
            rs=ps.executeQuery();
            if (rs.next())
            {
                
               SupplieDao sd=new SupplieDao();
               sd.eliminarSupplie(rs.getInt(1));
               eliminado = true;
            }
            conex.close();
       
        } catch (SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());

        }
        return eliminado;
    }

    public boolean modificaPharmaDosis(int numberP, String Dosis) {
        Conexion conexion = new Conexion();
        Connection conex;
        try {
            conex = conexion.getConnection();
            PreparedStatement ps = null;

            ps =
            conex.prepareStatement("UPDATE detailsPharmaceutical set Dosage = ?  where PharmaNumber = ?");

            ps.setString(1,Dosis );
            ps.setInt(2, numberP);

            int numeroFilas = ps.executeUpdate();
            System.out.println("El numero de filas que actualizo fueron" +
                               numeroFilas);
            conex.close();

        } catch (SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
            return false;
        }
        return true;
    }

    public boolean modificaPharmaMetAdmon(int numberP, String metAdmon) {
        Conexion conexion = new Conexion();
        Connection conex;
        try {
            conex = conexion.getConnection();
            PreparedStatement ps = null;

            ps =
            conex.prepareStatement("UPDATE detailsPharmaceutical set AdmonMethod = ?  where PharmaNumber = ?");

            ps.setString(1,metAdmon );
            ps.setInt(2, numberP);

            int numeroFilas = ps.executeUpdate();
            System.out.println("El numero de filas que actualizo fueron" +
                               numeroFilas);
            conex.close();

        } catch (SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
            return false;
        }
        return true;
    }
    
}
